package com.qf.ability.search.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;

import java.io.Serializable;
import java.util.List;

/**
 *
 * ES -> 索引库 -> N个分片 -> 副本
 *
 * 商品 -> 分类 -> N个规格
 *
 * 5-电冰箱   规格名称（1-开门方式）-规格值（1-双开门）
 *           规格名称（2-省电效能）-规格值（2-一级效能）
 *           ....
 *
 * 5-热水器    规格名称（1-电力能效）-（一级能效）
 *            规格名称（2-燃气能效）-（三级能效）
 *
 * 1、直接出数组  字段：[一级能效,三级能效,xxx,xxx,xxx]  一级能效
 * 2、存对象 字段：[{guigeName:电力能效, guigeVal:一级能效},{guigeName:燃气能效, guigeVal:二级能效},{}]
 *          guigeName:[电力能效,燃气能效,....]
 *          guigeVal:[二级能效,一级能效,....]
 * 3、Nested 嵌套类型
 *
 * 商品信息 - ES中对应的实体
 * description:
 * author: Ken
 * 公众号：Java架构栈
 */
@Data
@Document(indexName = "goods_index", shards = 1, replicas = 0)
public class GoodsInfoSearch implements Serializable {

    /**
     * 主键
     */
    @Id
    private Long id;

    /**
     * 商品分类的id
     */
    @Field(type = FieldType.Long)
    private Long fid;

    /**
     * 商品标题
     */
    @MultiField(
            mainField = @Field(type = FieldType.Text, analyzer = "ik_max_word"),
            otherFields = {
                    @InnerField(suffix = "pinyin", type = FieldType.Text, analyzer = "pinyin")
            }
    )
    private String title;

    /**
     * 价格
     */
    @Field(type = FieldType.Double)
    private Double price;

    /**
     * 返利比例
     */
    @Field(type = FieldType.Double, index = false)
    //返利的比例 1 ~ 0
    private Double bili;

    /**
     * 商品展示封面
     */
    @Field(type = FieldType.Keyword, index = false)
    private String image;

    /**
     * 商品规格
     */
    @Field(type = FieldType.Nested)
    private List<GoodsGuigeSearch> guiges;
}
